package com.wonders.hisdoctor.station.project.base.domain;

import com.wonders.his.common.utils.validator.group.PrimaryGroup;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * <p>军保医疗保险帐户：此表用于记录医保病人的帐户信息，主要面向医院收费使用。一个帐户可以与卡一一对应。当卡遗失时，注销原记录，生成一条新记录，分配新卡号，病人ID保持不变。当建立新帐户时，定义医保病人的帐户金和支付方法参数。收费时，修改各种累计值。</p>
 * <p>db_table: INSURANCE_ACCOUNTS</p>
 * @author tong-aj
 * @date 2021/03/09
 */
@ApiModel("军保医疗保险帐户：此表用于记录医保病人的帐户信息，主要面向医院收费使用。一个帐户可以与卡一一对应。当卡遗失时，注销原记录，生成一条新记录，分配新卡号，病人ID保持不变。当建立新帐户时，定义医保病人的帐户金和支付方法参数。收费时，修改各种累计值。")
@Accessors(chain = true)
@Data
@ToString
@TableName("INSURANCE_ACCOUNTS")
public class InsuranceAccounts implements Serializable {

    private static final long serialVersionUID = 2401241402266585022L;

    /** `主键` db_field: INSURANCE_NO; desc: 保险号：唯一标识一个保险帐户，可以对应卡号，不能重用 */
    @ApiModelProperty("保险号：唯一标识一个保险帐户，可以对应卡号，不能重用")
    @TableId
    @NotNull(message = "保险号：唯一标识一个保险帐户，可以对应卡号，不能重用不能为空", groups = PrimaryGroup.class)
    @TableField("INSURANCE_NO")
    private String insuranceNo;

    /** db_field: PATIENT_ID; desc: 病人ID */
    @ApiModelProperty("病人ID")
    @TableField("PATIENT_ID")
    private String patientId;

    /** db_field: NAME; desc: 被保人姓名 */
    @ApiModelProperty("被保人姓名")
    @TableField("NAME")
    private String name;

    /** db_field: NAME_PHONETIC; desc: 被保人姓名拼音 */
    @ApiModelProperty("被保人姓名拼音")
    @TableField("NAME_PHONETIC")
    private String namePhonetic;

    /** db_field: SEX; desc: 被保人性别：男、女、未知，本系统定义，见1.1性别字典 */
    @ApiModelProperty("被保人性别：男、女、未知，本系统定义，见1.1性别字典")
    @TableField("SEX")
    private String sex;

    /** db_field: DATE_OF_BIRTH; desc: 被保人出生日期 */
    @ApiModelProperty("被保人出生日期")
    @TableField("DATE_OF_BIRTH")
    private Date dateOfBirth;

    /** db_field: START_DATE_OF_WORK; desc: 被保人参加工作日期：指首次正式参加工作日期 */
    @ApiModelProperty("被保人参加工作日期：指首次正式参加工作日期")
    @TableField("START_DATE_OF_WORK")
    private Date startDateOfWork;

    /** db_field: WORKING_YEARS; desc: 被保人工龄：以年记工龄，如果被保人已退休或中途扣除工龄，则该值不等于当前日期减去参加工作日期 */
    @ApiModelProperty("被保人工龄：以年记工龄，如果被保人已退休或中途扣除工龄，则该值不等于当前日期减去参加工作日期")
    @TableField("WORKING_YEARS")
    private Integer workingYears;

    /** db_field: SALARY; desc: 被保人月薪：用于计算帐户金，单位：元 */
    @ApiModelProperty("被保人月薪：用于计算帐户金，单位：元")
    @TableField("SALARY")
    private BigDecimal salary;

    /** db_field: UNIT; desc: 被保人所在单位：工作单位代码 */
    @ApiModelProperty("被保人所在单位：工作单位代码")
    @TableField("UNIT")
    private String unit;

    /** db_field: IDENTITY_CLASS; desc: 被保人类别：反映医保统计意义上的分类。如在职职工、退休职工、家属等。用户定义 */
    @ApiModelProperty("被保人类别：反映医保统计意义上的分类。如在职职工、退休职工、家属等。用户定义")
    @TableField("IDENTITY_CLASS")
    private String identityClass;

    /** db_field: INSURANCE_TYPE; desc: 医保类别：反映支付方法的不同。如在职职工、退休职工、家属等。用户定义 */
    @ApiModelProperty("医保类别：反映支付方法的不同。如在职职工、退休职工、家属等。用户定义")
    @TableField("INSURANCE_TYPE")
    private String insuranceType;

    /** db_field: ACCOUNT_RATED_AMOUNT; desc: 个人帐户年度定额：保险金额中每年度可用于个人支付部分的定额 */
    @ApiModelProperty("个人帐户年度定额：保险金额中每年度可用于个人支付部分的定额")
    @TableField("ACCOUNT_RATED_AMOUNT")
    private BigDecimal accountRatedAmount;

    /** db_field: PAYMENT_BEGINNING_LINE; desc: 起付线：医疗费超出该线后，开始进入医保支付方案规定的统筹金支付阶段 */
    @ApiModelProperty("起付线：医疗费超出该线后，开始进入医保支付方案规定的统筹金支付阶段")
    @TableField("PAYMENT_BEGINNING_LINE")
    private BigDecimal paymentBeginningLine;

    /** db_field: ACCOUNT_INITIAL_AMOUNT; desc: 个人帐户年度初始额：上年度结转加上年度定额作为本年度的初始值，直到下次结转保持不变 */
    @ApiModelProperty("个人帐户年度初始额：上年度结转加上年度定额作为本年度的初始值，直到下次结转保持不变")
    @TableField("ACCOUNT_INITIAL_AMOUNT")
    private BigDecimal accountInitialAmount;

    /** db_field: ACCOUNT_BALANCE; desc: 个人帐户余额：保险金额中用于个人支付部分的累计余额。每次支付后扣除，定期（一年）自动增加年度定额 */
    @ApiModelProperty("个人帐户余额：保险金额中用于个人支付部分的累计余额。每次支付后扣除，定期（一年）自动增加年度定额")
    @TableField("ACCOUNT_BALANCE")
    private BigDecimal accountBalance;

    /** db_field: ACCOUNT_RESERVED_AMOUNT; desc: 备用金额：属于个人帐户但暂时不能用于支付的累计金额 */
    @ApiModelProperty("备用金额：属于个人帐户但暂时不能用于支付的累计金额")
    @TableField("ACCOUNT_RESERVED_AMOUNT")
    private BigDecimal accountReservedAmount;

    /** db_field: RELATED_INSURANCE_NO_1; desc: 关联亲属1保险号：当亲属1保险帐户变更时，本帐户需作相应变更。若不受影响，则为空 */
    @ApiModelProperty("关联亲属1保险号：当亲属1保险帐户变更时，本帐户需作相应变更。若不受影响，则为空")
    @TableField("RELATED_INSURANCE_NO_1")
    private String relatedInsuranceNo1;

    /** db_field: RELATIONSHIP_1; desc: 与亲属1关系：被保人与亲属1的关系，使用代码，见1.19社会关系字典 */
    @ApiModelProperty("与亲属1关系：被保人与亲属1的关系，使用代码，见1.19社会关系字典")
    @TableField("RELATIONSHIP_1")
    private String relationship1;

    /** db_field: RELATED_INSURANCE_NO_2; desc: 关联亲属2保险号：当亲属2保险帐户变更时，本帐户需作相应变更。若不受影响，则为空 */
    @ApiModelProperty("关联亲属2保险号：当亲属2保险帐户变更时，本帐户需作相应变更。若不受影响，则为空")
    @TableField("RELATED_INSURANCE_NO_2")
    private String relatedInsuranceNo2;

    /** db_field: RELATIONSHIP_2; desc: 与亲属2关系：被保人与亲属2的关系，使用代码，见1.19社会关系字典 */
    @ApiModelProperty("与亲属2关系：被保人与亲属2的关系，使用代码，见1.19社会关系字典")
    @TableField("RELATIONSHIP_2")
    private String relationship2;

    /** db_field: CREATE_DATE; desc: 帐户建立日期 */
    @ApiModelProperty("帐户建立日期")
    @TableField("CREATE_DATE")
    private Date createDate;

    /** db_field: EXPIRATION_DATE; desc: 帐户有效日期：超出有效日期后，该帐号不可支付。可用于帐户定期审核 */
    @ApiModelProperty("帐户有效日期：超出有效日期后，该帐号不可支付。可用于帐户定期审核")
    @TableField("EXPIRATION_DATE")
    private Date expirationDate;

    /** db_field: LAST_DEPOSIT_DATE; desc: 帐户金续入日期：最近一次帐户金生成及存入日期，用于下次生成时判断是否需要生成 */
    @ApiModelProperty("帐户金续入日期：最近一次帐户金生成及存入日期，用于下次生成时判断是否需要生成")
    @TableField("LAST_DEPOSIT_DATE")
    private Date lastDepositDate;

    /** db_field: ACCOUNT_STATUS; desc: 帐户状态：0-可用 1-挂起 2-注销 */
    @ApiModelProperty("帐户状态：0-可用 1-挂起 2-注销")
    @TableField("ACCOUNT_STATUS")
    private Integer accountStatus;

    /** db_field: CANCEL_DATE; desc: 帐户注销日期 */
    @ApiModelProperty("帐户注销日期")
    @TableField("CANCEL_DATE")
    private Date cancelDate;

    /** db_field: CANCEL_CAUSE; desc: 帐户注销原因：如：遗失、过期等 */
    @ApiModelProperty("帐户注销原因：如：遗失、过期等")
    @TableField("CANCEL_CAUSE")
    private String cancelCause;

    /** db_field: UPDATE_DATE_TIME; desc: 更新日期及时间：最近一次内容的更新日期及时间，包含各种更新操作 */
    @ApiModelProperty("更新日期及时间：最近一次内容的更新日期及时间，包含各种更新操作")
    @TableField("UPDATE_DATE_TIME")
    private Date updateDateTime;

    /** db_field: OPERATOR; desc: 建立者：建立帐户的操作员姓名 */
    @ApiModelProperty("建立者：建立帐户的操作员姓名")
    @TableField("OPERATOR")
    private String operator;

    /** db_field: BIRTH_PLACE; desc: 出生地 */
    @ApiModelProperty("出生地")
    @TableField("BIRTH_PLACE")
    private String birthPlace;

    /** db_field: NATION; desc: 民族 */
    @ApiModelProperty("民族")
    @TableField("NATION")
    private String nation;

    /** db_field: MARITAL_STATUS; desc: 婚姻状况 */
    @ApiModelProperty("婚姻状况")
    @TableField("MARITAL_STATUS")
    private String maritalStatus;

    /** db_field: ID_NO; desc: 证件号码 */
    @ApiModelProperty("证件号码")
    @TableField("ID_NO")
    private String idNo;

    /** db_field: DESIGNATED_POLICLINIC; desc: 定点门诊部门 */
    @ApiModelProperty("定点门诊部门")
    @TableField("DESIGNATED_POLICLINIC")
    private String designatedPoliclinic;

    /** db_field: DESIGNATED_HOSPITAL; desc: 定点医院 */
    @ApiModelProperty("定点医院")
    @TableField("DESIGNATED_HOSPITAL")
    private String designatedHospital;

    /** db_field: WORKING_STATUS; desc: 工作状态 */
    @ApiModelProperty("工作状态")
    @TableField("WORKING_STATUS")
    private Integer workingStatus;

    /** db_field: FUND_TYPE; desc: 保险类型 */
    @ApiModelProperty("保险类型")
    @TableField("FUND_TYPE")
    private String fundType;

    /** db_field: SUBSIDY_TYPE; desc: SUBSIDY_TYPE */
    @ApiModelProperty("SUBSIDY_TYPE")
    @TableField("SUBSIDY_TYPE")
    private String subsidyType;

    /** db_field: ACCOUNT_TYPE; desc: ACCOUNT_TYPE */
    @ApiModelProperty("ACCOUNT_TYPE")
    @TableField("ACCOUNT_TYPE")
    private Integer accountType;

    /** db_field: STAFF_NUM; desc: STAFF_NUM */
    @ApiModelProperty("STAFF_NUM")
    @TableField("STAFF_NUM")
    private Integer staffNum;

    /** db_field: SETTLE_DATE; desc: SETTLE_DATE */
    @ApiModelProperty("SETTLE_DATE")
    @TableField("SETTLE_DATE")
    private Date settleDate;

    /** db_field: CARD_INFO; desc: CARD_INFO */
    @ApiModelProperty("CARD_INFO")
    @TableField("CARD_INFO")
    private String cardInfo;

}